package com.ds.utils;

import cn.hutool.crypto.digest.DigestUtil;

import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * 自定义生成签名的工具类，可选项，因为在实现中，应该是前台传参或代码里写的，这是只是方便测试调度调试
 *
 * @author huahua
 * @DATE 2025/5/4
 **/
public class SignatureUtil {

    /**
     * 生成签名
     *
     * @param body 请求体
     * @param secretKey 密钥
     * @param nonce 随机数
     * @param timestamp 时间戳
     * @return 签名
     */
    public static String generateSignature(String body, String secretKey, String nonce, String timestamp) {
        if (!StringUtils.hasText(body) || !StringUtils.hasText(secretKey) || !StringUtils.hasText(nonce)
            || !StringUtils.hasText(timestamp)) {
            throw new IllegalArgumentException("参数不能为空");
        }

        // 按照 secretKey + nonce + timestamp + body 的顺序拼接字符串
        String data = String.format("%s%s%s%s", secretKey, nonce, timestamp, body);
        System.out.println("data = " + data);

        // 使用MD5算法计算签名
        return DigestUtil.md5Hex(data);
    }

    public static void main(String[] args) {
        // 示例参数
        String body = "{\n" + "  \"fromAccountId\": \"孙悟空\",\n" + "  \"toAccountId\": \"猪八戒\",\n"
            + "  \"transferPrice\": 1000\n" + "}";

        // 秘钥
        String secretKey = "test-hua8-83xj-dhd8-xdj8";
        // 随机数
        String nonce = UUID.randomUUID().toString().replace("-", "");
        // 时间戳
        long timestamp = System.currentTimeMillis() / 1000;

        // 生成签名
        String sign = generateSignature(body, secretKey, nonce, String.valueOf(timestamp));

        // 输出生成的签名
        System.out.println("X-Sign: " + sign);
        System.out.println("X-Nonce: " + nonce);
        System.out.println("X-Timestamp: " + timestamp);
    }
}
